Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

feature/map/src/commonTest/kotlin/org/meshtastic/feature/map/geojson/IconUrlsTest.kt renovate/fastlane-2.x-lockfile (056eed64) Text, 4.15 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.map.geojson

Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertContains
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertTrue

Tff7b72private Tff7b72fun Td2a8fffeatureTb4b4b4(Te6edf3propertiesTb4b4b4: Tffa657StringTb4b4b4) Tff7b72=
Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fftypeTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffFeatureTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6ffpropertiesTa5d6ff"Ta5d6ff:Tffd700$Te6edf3propertiesTa5d6ff,Ta5d6ff"Ta5d6ffgeometryTa5d6ff"Ta5d6ff:{Ta5d6ff"Ta5d6fftypeTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffPointTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6ffcoordinatesTa5d6ff"Ta5d6ff:[0,0]}}Ta5d6ff"""

Tff7b72private Tff7b72fun Td2a8ffcollectionTb4b4b4(Tff7b72vararg Te6edf3featuresTb4b4b4: Tffa657StringTb4b4b4) Tff7b72=
Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fftypeTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffFeatureCollectionTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fffeaturesTa5d6ff"Ta5d6ff:[Tffd700${Te6edf3featuresTb4b4b4.Te6edf3joinToStringTb4b4b4(Ta5d6ff"Tb4b4b4,Ta5d6ff"Tb4b4b4)Tffd700}Ta5d6ff]}Ta5d6ff"""

Tff7b72class T56d364IconUrlsTest Tb4b4b4{
Tf0883e@Test
Tff7b72fun Td2a8ff`every distinct icon in the document is found once`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3geoJson Tff7b72=
Te6edf3collectionTb4b4b4(
Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6fffiles/a.pngTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4,
Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6fffiles/b.pngTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4,
Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6fffiles/a.pngTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3setOfTb4b4b4(Ta5d6ff"Ta5d6fffiles/a.pngTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fffiles/b.pngTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3geoJsonIconUrlsTb4b4b4(Te6edf3geoJsonTb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`a document with no icons asks for none`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Te6edf3emptySetTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3geoJsonIconUrlsTb4b4b4(Te6edf3collectionTb4b4b4(Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffno icon hereTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`features without properties are skipped rather than throwing`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3geoJson Tff7b72= Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fftypeTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffFeatureCollectionTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fffeaturesTa5d6ff"Ta5d6ff:[{Ta5d6ff"Ta5d6fftypeTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffFeatureTa5d6ff"Ta5d6ff},null]}Ta5d6ff"""

Te6edf3assertEqualsTb4b4b4(Te6edf3emptySetTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3geoJsonIconUrlsTb4b4b4(Te6edf3geoJsonTb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`a blank icon is not an icon`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Te6edf3emptySetTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3geoJsonIconUrlsTb4b4b4(Te6edf3collectionTb4b4b4(Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ff Ta5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`an icon that is not a string does not take the whole document down`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3geoJson Tff7b72=
Te6edf3collectionTb4b4b4(Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:{Ta5d6ff"Ta5d6ffnestedTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffobjectTa5d6ff"Ta5d6ff}}Ta5d6ff"""Tb4b4b4)Tb4b4b4, Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6fffiles/good.pngTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3setOfTb4b4b4(Ta5d6ff"Ta5d6fffiles/good.pngTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3geoJsonIconUrlsTb4b4b4(Te6edf3geoJsonTb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`absolute icon urls are rejected`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3geoJson Tff7b72=
Te6edf3collectionTb4b4b4(
Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffhttps://example.org/a.pngTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4,
Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffhttp://example.org/b.pngTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4,
Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6fffile:///tmp/c.pngTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4,
Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffdata:image/png;base64,AA==Ta5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4,
Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ff//example.org/d.pngTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3emptySetTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3geoJsonIconUrlsTb4b4b4(Te6edf3geoJsonTb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`rewriting icon urls only touches configured icons`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3geoJson Tff7b72=
Te6edf3collectionTb4b4b4(
Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6fffiles/packed.pngTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffpackedTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4,
Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6fffiles/plain.pngTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6fftitleTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffplainTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72val Te6edf3rewritten Tff7b72= Te6edf3rewriteGeoJsonIconUrlsTb4b4b4(Te6edf3geoJsonTb4b4b4, Te6edf3mapOfTb4b4b4(Ta5d6ff"Ta5d6fffiles/packed.pngTa5d6ff" Te6edf3to Ta5d6ff"Ta5d6fffile:///cache/packed.pngTa5d6ff"Tb4b4b4)Tb4b4b4)

Te6edf3assertContainsTb4b4b4(Te6edf3rewrittenTb4b4b4, Ta5d6ff"""Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6fffile:///cache/packed.pngTa5d6ff"""Ta5d6ff"Ta5d6ff)
assertContains(rewritten, Ta5d6ff"Ta5d6ff"""Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6fffiles/plain.pngTa5d6ff"""Ta5d6ff"Ta5d6ff)
assertEquals(setOf(Ta5d6ff"Te6edf3fileTb4b4b4:T8b949e///cache/packed.png", "files/plain.png"), trustedGeoJsonIconUrls(rewritten))
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`a document that will not parse yields no icons rather than failing the layer`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Te6edf3emptySetTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3geoJsonIconUrlsTb4b4b4(Ta5d6ff"Ta5d6ffnot json at allTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3emptySetTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3geoJsonIconUrlsTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`the icon count is capped so one import cannot fill the style with images`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3many Tff7b72= Tb4b4b4(T79c0ff1.Tb4b4b4.T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3featureTb4b4b4(Ta5d6ff"""Ta5d6ff{Ta5d6ff"Ta5d6fficon-urlTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6fficons/Tffd700$Te6edf3itTa5d6ff.pngTa5d6ff"Ta5d6ff}Ta5d6ff"""Tb4b4b4) Tb4b4b4}

Te6edf3assertTrueTb4b4b4(Te6edf3geoJsonIconUrlsTb4b4b4(Te6edf3collectionTb4b4b4(Tff7b72*Te6edf3manyTb4b4b4.Te6edf3toTypedArrayTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3size Tff7b72<Tff7b72= T79c0ff6T79c0ff4Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.2 - Generated in 0.05s